package com.beantools.filters;

import com.beantools.reflect.property.PropertyFilters;

import static com.beantools.util.ObjectUtil.isNull;

/**
 * 该类采用建造者设计模式，用来创建MethodFilters过滤器
 *
 * @author baoya
 * @version 1.0
 * @since 1.1.0
 */
public class BuilderFilters {

    private static MethodFilters methodFilters;

    private static SignFilters signFilters;

    private static PropertyFilters propertyFilters;

    private static NumberFilters numberFilters;

    /**
     * 使用单例设计模式，构建MethodFilters对象，如果methodFilters对象存在，
     * 则直接返回；不存在，则创建filters对象，并返回该对象
     *
     * @return 返回MethodFilters对象
     */
    public synchronized static MethodFilters builderMethodFilters() {
        if (isNull(methodFilters)) {
            methodFilters = new MethodFilters();
        }
        return methodFilters;
    }

    /**
     * 使用单例设计模式，构建SignFilters对象，如果filters对象存在，
     * 则直接返回；不存在，则创建filters对象，并返回该对象
     *
     * @return 返回MethodFilters对象
     */
    public synchronized static SignFilters builderSignFilters() {
        if (isNull(signFilters)) {
            signFilters = new SignFilters();
        }
        return signFilters;
    }

    /**
     * 使用单例设计模式，构建SignFilters对象，如果filters对象存在，
     * 则直接返回；不存在，则创建filters对象，并返回该对象
     *
     * @return 返回MethodFilters对象
     */
    public synchronized static PropertyFilters builderPropertyFilters() {
        if (isNull(propertyFilters)) {
            propertyFilters = new PropertyFilters();
        }
        return propertyFilters;
    }

    /**
     * 使用单例设计模式，构建SignFilters对象，如果filters对象存在，
     * 则直接返回；不存在，则创建filters对象，并返回该对象
     *
     * @return 返回MethodFilters对象
     */
    public synchronized static NumberFilters builderNumberFilters() {
        if (isNull(numberFilters)) {
            numberFilters = new NumberFilters();
        }
        return numberFilters;
    }

}
